(レポート) BDT309: Amazon EMR上でデータサイエンスのためにApache Sparkを利用する際のベストプラクティス #reinvent
機械学習や統計分析をしていて、そろそろApache Sparkを使わないと厳しいかなーと思い、公開されているスライドを読んでみました。
概要
- Apache Sparkを用いたデータサイエンス
- SparkをAmazon EMR上で動かす
- ユーザーのユースケースとアーキテクチャ
- Amazon EMR上でSparkを利用する際のベストプラクティス
- アメリカ国内の航空データを分析したZeppelinのデモ
YouTubeで公開されている動画も確認した所、Sparkの概要とEMRでの利用イメージの説明に20分、ベストプラクティスに20分、デモが5分という感じでした。
Apache Sparkを用いたデータサイエンス
まずはデータサイエンスにApache Sparkがどう利用できるかということで、Sparkの概要についての説明です。
- Sparkは高速
- ユースケースに対応する多数のコンポーネントが存在する
- Scala, python, Java, SQL, R とあなたの利用する言語で利用できる
- Apache Zeppelinを用いてクエリーの開発ができる
- DataFrameを利用して簡単に対話処理が可能
- DataFrameはJSON, Parqet, Hive, RDDなど複数のフォーマットに対応している
- Spark SQLのData Source APIはCSV, elasticsearch, AVRO, Cassandraなどに対応している
- DataFrameを機械学習の入出力として利用できる
- ストリーミングデータでもDataFrameを利用できる
- SparkRを利用するとRでDataFrameを操作できる
- Spark SQLはHiveクエリ互換で、JDBC/ODBCでも接続可能
SparkをAmazon EMR上で動かす
次はAmazon EMR上でSparkを実行する方法についてでした。
- 最新バージョンのSparkを起動できる
- SparkはYARN上で実行する
- 設定済みのクラスタを数分で起動できる。設定変更も可能
- DynamoDB, RDS, elasticsearch, Redshift, kafka, Kinesis, S3といった多くのストレージ層を利用できる
- S3を利用することで処理とストレージ層を分離できる
- セキュリティ
- 蓄積されているデータも処理中のデータも暗号化可能
- クラスタ、アプリケーション、EMRサービスでの権限管理
- VPC、セキュリティグループによるアクセス制御
- CloudTrailによる監査
ユーザーのユースケースとアーキテクチャ
実際にEMRでSparkを利用しているユーザーのユースケースとアーキテクチャの紹介です。
Amazon EMR上でSparkを利用する際のベストプラクティス
ベストプラクティスです。特にコア数とのメモリサイズについてイラストと計算式つきで丁寧に解説しておりいい感じです。
- 適切なインスタンスタイプを利用する
- Executorについて理解する
- サイジング
- Dynamic Allocation
- ストレージレイヤーについて理解する
- ファイルフォーマットと圧縮
- キャッシュテーブル
- パフォーマンス向上
- データのシリアライゼーション
- シャッフルを避ける
- パーティション管理
- RDD Persistence
アメリカ国内の航空データを分析したZeppelinのデモ
Zeppelinのデモです。ZeppelinはいわゆるNotebookと言われる種類のアプリケーションで、Zeppelin上でSparkのコードを記述するとその処理結果も同じ画面上に表示することが出来ます。デモではデータのロード、クエリの実行、RDDのキャッシュ、Zeppelinのグラフ描画機能などを紹介していました。実際にYouTubeでご覧になっていただくとイメージがわくと思います。
まとめ
Sparkが成熟してきており、EMR上でのベストプラクティスもできているので安心して利用できる状況なっていることが分かりました。2年ぐらい前からSparkはウォッチしていたのですが、日本語の書籍も出てきましたし本格的に取り組んでいければと考えています。